<?php

/*
  Motor Mysql
 */

class Db {

    private $server;
    private $user;
    private $pass;
    private $db;

    /** @var mysqli */
    private $conexion;
    private $resultado;

    function __construct() {

        //parametros de conexion
        $this->server = DB_HOST;
        $this->user = DB_USER;
        $this->pass = DB_PASS;
        $this->db = DB_DEFAULT_SCHEMA;
        $this->conectar();
    }

    public function __destruct() {
        $this->desconectar();
    }

    private function conectar() {

        //conecto al servidor
        $this->conexion = new mysqli($this->server, $this->user, $this->pass);

        
        $this->conexion->set_charset("utf8");
        //selecciono la base de datos
        $this->conexion->select_db($this->db);
    }

    private function desconectar() {
        $this->conexion->close();
    }

    /**
     * Realiza una consulta en la base de datos
     * @param <type> $sql Comando SQL
     */
    public function consultar($sql) {
        if (!$this->resultado = $this->conexion->query($sql)) {
            printf("Mysql Error: %s\n", $this->conexion->error);
            return false;
        } else {
            return true;
        }
    }

    /**
     * Obtiene resultados devueltos de un campo especifico
     * @example while($res=$db->extraeRegistro->nombre())...)
     */
    public function extraeRegistro() {
        try {
            return $this->resultado->fetch_object();
        } catch (Exception $exc) {
            echo 'hgfhf';
        }
    }

    /**
     * Ejecuta un comando SQL
     * @param $comando SQL ej INSERT o UPDATE
     */
    public function ejecutar($sql) {
        if (!$this->resultado = $this->conexion->query($sql)) {
            printf("Mysql Error: %s\n", $this->conexion->error);
            return false;
        } else {
            return true;
        }
    }

    public function cantidadRegistros() {
        return $this->conexion->affected_rows;
    }

    public function ultimoId() {
        return $this->conexion->insert_id;
    }

}

?>
